/**
 * 仅通过规则变化获取单词原型（不处理不规则词）
 */
const regularWordLemma = {
  /**
   * 获取单词原型（仅处理规则变化）
   * @param {string} word - 输入单词（任意形式）
   * @returns {string} 推导的原型（若无法匹配规则则返回原词）
   */
  getLemma(word) {
    if (!word || typeof word !== "string") return "";
    const lowerWord = word.toLowerCase();

    // 1. 先处理动词规则变化
    let lemma = this.handleVerbRules(lowerWord);
    if (lemma !== lowerWord) return lemma;

    // 2. 处理名词复数规则变化
    lemma = this.handleNounRules(lowerWord);
    if (lemma !== lowerWord) return lemma;

    // 3. 处理形容词/副词比较级/最高级
    lemma = this.handleAdjectiveRules(lowerWord);
    if (lemma !== lowerWord) return lemma;

    // 无匹配规则，返回原词
    return lowerWord;
  },

  /**
   * 处理动词规则变化
   * 规则覆盖：过去式(ed)、第三人称单数(s/es)、现在分词(ing)
   */
  handleVerbRules(word) {
    // 情况1：过去式/过去分词（以ed结尾）
    if (word.endsWith("ed")) {
      // 去e加ed（如loved → love）
      if (word.length > 2 && this.isVowel(word[word.length - 3])) {
        return word.slice(0, -1); // 去掉末尾d（ed → e）
      }
      // 一般情况（如walked → walk）
      return word.slice(0, -2);
    }

    // 情况2：第三人称单数（以s结尾）
    if (word.endsWith("s")) {
      // 以es结尾（如passes → pass）
      if (word.endsWith("es")) {
        // 特殊：以s/x/ch/sh结尾加es（如watches → watch）
        if (["s", "x", "h"].includes(word[word.length - 4])) {
          return word.slice(0, -2);
        }
        return word.slice(0, -1); // 去掉s（es → e）
      }
      // 一般情况（如runs → run）
      return word.slice(0, -1);
    }

    // 情况3：现在分词（以ing结尾）
    if (word.endsWith("ing")) {
      // 去e加ing（如coming → come）
      if (word.length > 3 && this.isVowel(word[word.length - 4])) {
        return word.slice(0, -3) + "e";
      }
      // 双写辅音加ing（如running → run）
      if (word.length > 4 && word[word.length - 4] === word[word.length - 5]) {
        return word.slice(0, -4); // 去掉双写的辅音+ing
      }
      // 一般情况（如walking → walk）
      return word.slice(0, -3);
    }

    return word;
  },

  /**
   * 处理名词复数规则变化
   * 规则覆盖：s/es/ies/ves等复数形式
   */
  handleNounRules(word) {
    // 以ies结尾（如babies → baby）
    if (word.endsWith("ies") && word.length > 3) {
      return word.slice(0, -3) + "y";
    }

    // 以ves结尾（如wolves → wolf）
    if (word.endsWith("ves")) {
      return word.slice(0, -3) + "f"; // 去掉ves，加f
    }

    // 以es结尾（如boxes → box）
    if (word.endsWith("es")) {
      // 以s/x/ch/sh结尾加es（如classes → class）
      if (["s", "x", "h"].includes(word[word.length - 4])) {
        return word.slice(0, -2);
      }
      return word.slice(0, -1); // 其他情况去掉s（es → e）
    }

    // 以s结尾的一般复数（如books → book）
    if (word.endsWith("s") && word.length > 1) {
      return word.slice(0, -1);
    }

    return word;
  },

  /**
   * 处理形容词/副词比较级/最高级规则变化
   * 规则覆盖：比较级(er)、最高级(est)
   */
  handleAdjectiveRules(word) {
    // 最高级（以est结尾）
    if (word.endsWith("est") && word.length > 3) {
      // 以iest结尾（如happiest → happy）
      if (word.endsWith("iest")) {
        return word.slice(0, -4) + "y";
      }
      // 一般情况（如tallest → tall）
      return word.slice(0, -3);
    }

    // 比较级（以er结尾）
    if (word.endsWith("er") && word.length > 2) {
      // 以ier结尾（如happier → happy）
      if (word.endsWith("ier")) {
        return word.slice(0, -3) + "y";
      }
      // 一般情况（如taller → tall）
      return word.slice(0, -2);
    }

    return word;
  },

  /**
   * 判断是否为元音字母（a/e/i/o/u）
   */
  isVowel(char) {
    return "aeiou".includes(char);
  },
};

module.exports = regularWordLemma;
